window.onload = function () {
    // let 和var的不同
    // 1、不存在变量提升
    // console.log(a);
    // var a = 100;
    // //解析过程
    // //预解析
    // var a;
    // //逐行解析
    // console.log(a);
    // a = 100;

    // //
    // console.log(a);  //Cannot access 'a' before initialization
    // let a = 100;

    //2、同一个作用域内不能重复定义同一个名称
    // var a = 10;
    // var a = 100;
    // console.log(a); //100

    // var a = 10;
    // let a = 100;
    // console.log(a);  //Identifier 'a' has already been declared

    // let a = 10;
    // let a = 100;

    // let a = 10;
    // a = 100;
    // console.log(a); //100

    //3、有着严格的作用域
    // function fn(){
    //     var a = 'a';
    //     if(true){  //块级作用域
    //         let a = 'b'
    //     };
    //     console.log(a) //'a'
    // };
    // fn();

    //4、块级作用域的重要性
    // for(var i=0;i<5;i++){};
    // console.log(i); //5  i成为全局变量


    // for(let i=0;i<5;i++){};
    // console.log(i); // i is not defined

    // //扩展题
    // let arr = [];
    // for(let i=0;i<5;i++){
    //     arr[i] = function(){
    //         console.log(i)
    //     }
    // };
    // arr[2](); //2
    // arr[1](); //1

    // //提升题
    // function f1(id){  ////2、同一个作用域内不能重复定义同一个名称
    //     //var id = 100;
    //     let id = 88;
    //     console.log(id);  //Identifier 'id' has already been declared
    // };
    // f1(100);

    // var x = 1;
    // function f2(){
    //     if(true){
    //         x = 2;  
    //         console.log(x);  // Cannot access 'x' before initialization
    //         let x;   ////2、同一个作用域内不能重复定义同一个名称
    //     }
    // };
    // f2();


    // let x = y ,y = 100;  //Cannot access 'y' before initialization
    // function f3(){
    //     console.log(x,y)
    // };
    // f3();



    // const 的定义
    // const 声明一个只读的常量。一旦声明，常量的值就不能改变。
    // 保持let的不存在变量提升，同一个作用域内不能重复定义同一个名称，有着严格的作用域；
    // const x = 10;  //常量  只读
    // x = 100; //error
    // console.log(x); //Assignment to constant variable.

    // const y; // Missing initializer in const declaration  const 声明变量时，需要立即初始化，不能留到以后赋值
    // console.log(y);

    //变量是引用类型
    const arr = [1,2,3,4];
    arr[0] = 100;
    //console.log(arr);  //[ 100, 2, 3, 4 ]
    arr.push(5); //ok
    arr = ['a','b'];  //Assignment to constant variable.


    const obj = {id:1};
    obj['name'] = 'amy';
    console.log(obj)  //{ id: 1, name: 'amy' }
    obj = {v:1}; //error





}



